1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.collect.testing.testers;
18
19 import static com.google.common.collect.testing.features.CollectionFeature.ALLOWS_NULL_VALUES;
20 import static com.google.common.collect.testing.features.CollectionSize.ONE;
21 import static com.google.common.collect.testing.features.CollectionSize.ZERO;
22 import static com.google.common.collect.testing.features.ListFeature.SUPPORTS_ADD_WITH_INDEX;
23 import static java.util.Collections.singletonList;
24
25 import com.google.common.annotations.GwtCompatible;
26 import com.google.common.collect.testing.MinimalCollection;
27 import com.google.common.collect.testing.features.CollectionFeature;
28 import com.google.common.collect.testing.features.CollectionSize;
29 import com.google.common.collect.testing.features.ListFeature;
30
31 import java.util.List;
32
33
34
35
36
37
38
39
40 @SuppressWarnings("unchecked")
41 @GwtCompatible
42 public class ListAddAllAtIndexTester<E> extends AbstractListTester<E> {
43 @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
44 @CollectionSize.Require(absent = ZERO)
45 public void testAddAllAtIndex_supportedAllPresent() {
46 assertTrue("addAll(n, allPresent) should return true",
47 getList().addAll(0, MinimalCollection.of(samples.e0)));
48 expectAdded(0, samples.e0);
49 }
50
51 @ListFeature.Require(absent = SUPPORTS_ADD_WITH_INDEX)
52 @CollectionSize.Require(absent = ZERO)
53 public void testAddAllAtIndex_unsupportedAllPresent() {
54 try {
55 getList().addAll(0, MinimalCollection.of(samples.e0));
56 fail("addAll(n, allPresent) should throw");
57 } catch (UnsupportedOperationException expected) {
58 }
59 expectUnchanged();
60 }
61
62 @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
63 @CollectionSize.Require(absent = ZERO)
64 public void testAddAllAtIndex_supportedSomePresent() {
65 assertTrue("addAll(n, allPresent) should return true",
66 getList().addAll(0, MinimalCollection.of(samples.e0, samples.e3)));
67 expectAdded(0, samples.e0, samples.e3);
68 }
69
70 @ListFeature.Require(absent = SUPPORTS_ADD_WITH_INDEX)
71 @CollectionSize.Require(absent = ZERO)
72 public void testAddAllAtIndex_unsupportedSomePresent() {
73 try {
74 getList().addAll(0, MinimalCollection.of(samples.e0, samples.e3));
75 fail("addAll(n, allPresent) should throw");
76 } catch (UnsupportedOperationException expected) {
77 }
78 expectUnchanged();
79 expectMissing(samples.e3);
80 }
81
82 @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
83 public void testAddAllAtIndex_supportedNothing() {
84 assertFalse("addAll(n, nothing) should return false",
85 getList().addAll(0, emptyCollection()));
86 expectUnchanged();
87 }
88
89 @ListFeature.Require(absent = SUPPORTS_ADD_WITH_INDEX)
90 public void testAddAllAtIndex_unsupportedNothing() {
91 try {
92 assertFalse("addAll(n, nothing) should return false or throw",
93 getList().addAll(0, emptyCollection()));
94 } catch (UnsupportedOperationException tolerated) {
95 }
96 expectUnchanged();
97 }
98
99 @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
100 public void testAddAllAtIndex_withDuplicates() {
101 MinimalCollection<E> elementsToAdd
102 = MinimalCollection.of(samples.e0, samples.e1, samples.e0, samples.e1);
103 assertTrue("addAll(n, hasDuplicates) should return true",
104 getList().addAll(0, elementsToAdd));
105 expectAdded(0, samples.e0, samples.e1, samples.e0, samples.e1);
106 }
107
108 @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
109 @CollectionFeature.Require(ALLOWS_NULL_VALUES)
110 public void testAddAllAtIndex_nullSupported() {
111 List<E> containsNull = singletonList(null);
112 assertTrue("addAll(n, containsNull) should return true",
113 getList().addAll(0, containsNull));
114
115
116
117
118 expectAdded(0, (E) null);
119 }
120
121 @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
122 @CollectionFeature.Require(absent = ALLOWS_NULL_VALUES)
123 public void testAddAllAtIndex_nullUnsupported() {
124 List<E> containsNull = singletonList(null);
125 try {
126 getList().addAll(0, containsNull);
127 fail("addAll(n, containsNull) should throw");
128 } catch (NullPointerException expected) {
129 }
130 expectUnchanged();
131 expectNullMissingWhenNullUnsupported(
132 "Should not contain null after unsupported addAll(n, containsNull)");
133 }
134
135 @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
136 @CollectionSize.Require(absent = {ZERO, ONE})
137 public void testAddAllAtIndex_middle() {
138 assertTrue("addAll(middle, disjoint) should return true",
139 getList().addAll(getNumElements() / 2, createDisjointCollection()));
140 expectAdded(getNumElements() / 2, createDisjointCollection());
141 }
142
143 @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
144 @CollectionSize.Require(absent = ZERO)
145 public void testAddAllAtIndex_end() {
146 assertTrue("addAll(end, disjoint) should return true",
147 getList().addAll(getNumElements(), createDisjointCollection()));
148 expectAdded(getNumElements(), createDisjointCollection());
149 }
150
151 @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
152 public void testAddAllAtIndex_nullCollectionReference() {
153 try {
154 getList().addAll(0, null);
155 fail("addAll(n, null) should throw");
156 } catch (NullPointerException expected) {
157 }
158 expectUnchanged();
159 }
160
161 @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
162 public void testAddAllAtIndex_negative() {
163 try {
164 getList().addAll(-1, MinimalCollection.of(samples.e3));
165 fail("addAll(-1, e) should throw");
166 } catch (IndexOutOfBoundsException expected) {
167 }
168 expectUnchanged();
169 expectMissing(samples.e3);
170 }
171
172 @ListFeature.Require(SUPPORTS_ADD_WITH_INDEX)
173 public void testAddAllAtIndex_tooLarge() {
174 try {
175 getList().addAll(getNumElements() + 1, MinimalCollection.of(samples.e3));
176 fail("addAll(size + 1, e) should throw");
177 } catch (IndexOutOfBoundsException expected) {
178 }
179 expectUnchanged();
180 expectMissing(samples.e3);
181 }
182 }